package com.zcc.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineCountListener implements HttpSessionListener {
    //创建Session监听，检测触发了什么事件，比如鼠标点击等等
    //一旦创建Session就会触发一次这个事件
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        //如果这个值为空，当前访问人数加1，因为这个网站刚刚被自己访问了，所以人数至少加1
        if (onlineCount == null) {
            onlineCount = 1;
        }
        //如果不为空，打开一次Session就给之前的人数值加1
        else {
            onlineCount++;
        }
        //将人数属性重新赋值
        ctx.setAttribute("OnlineCount", onlineCount);
    }

    //销毁Session监听
    //一旦销毁Session就会触发一次这个事件
    public void sessionDestroyed(HttpSessionEvent se) {
        //手动销毁Session
        se.getSession().invalidate();
        ServletContext ctx = se.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        //如果这个值为空，当前访问人数就是空
        if (onlineCount == null) {
            onlineCount = 0;
        }
        //如果不为空，关闭一次Session就给之前的人数值减1
        else {
            onlineCount--;
        }
        //将人数属性重新赋值
        ctx.setAttribute("OnlineCount", onlineCount);
    }
}
